﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AcadPos.Entity;
using TrustX.Dados;
using System.Data;

namespace AcadPos.Data
{
    public class DBAreaConhecimento
    {
        #region Inserir
        public bool inserir(AreaConhecimento area, string usuario)
        {
            string SQL = @"INSERT INTO TB_AREA_CONHECIMENTO
                                        (
                                        DESCRICAO,
                                        SITUACAO,
                                        DATA_CADASTRO
                                        )
                                    VALUES
                                        (
                                        UPPER(@DESCRICAO),
                                        @SITUACAO,
                                        GETDATE()
                                        )";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, area.Situacao);            

            //return db.ExecuteNonQuery();
            bool inseriu = db.ExecuteNonQuery();
            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'INSERT',
                        'TB_AREA_CONHECIMENTO',
                        ((SELECT CAST(MAX(ID_AREA_CONHECIMENTO) AS VARCHAR) FROM TB_AREA_CONHECIMENTO) 
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);
                db.AddParam("@ID_AREA_CONHECIMENTO", SqlDbType.Int, area.IdAreaConhecimento);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, area.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);

            }
            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Alterar
        public bool alterar(AreaConhecimento area, string usuario)
        {
            string SQL = @"UPDATE TB_AREA_CONHECIMENTO
                                    SET    DESCRICAO                = UPPER(@DESCRICAO),
                                           SITUACAO                 = @SITUACAO
                                    WHERE  ID_AREA_CONHECIMENTO     = @ID_AREA_CONHECIMENTO";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, area.Situacao);
            db.AddParam("@ID_AREA_CONHECIMENTO", SqlDbType.Int, area.IdAreaConhecimento);
            //return db.ExecuteNonQuery();

           
            bool atualizou = db.ExecuteNonQuery();
            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'UPDATE',
                        'TB_AREA_CONHECIMENTO',
                        (CAST(@ID_AREA_CONHECIMENTO AS VARCHAR)
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);

                db.AddParam("@ID_AREA_CONHECIMENTO", SqlDbType.Int, area.IdAreaConhecimento);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, area.Situacao);
                //db.AddParam("@DATA_CADASTRO", SqlDbType.DateTime, area.DataCadastro);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return atualizou;

        }
        #endregion

        #region Excluir
        public bool excluir(AreaConhecimento area, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_AREA_CONHECIMENTO
                            WHERE  ID_AREA_CONHECIMENTO = @ID_AREA_CONHECIMENTO ";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_AREA_CONHECIMENTO", SqlDbType.Int, area.IdAreaConhecimento);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, area.Situacao);
            //db.AddParam("@DATA_CADASTRO", SqlDbType.DateTime, area.DataCadastro);
            db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();
            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'DELETE',
                        'TB_AREA_CONHECIMENTO',
                        (SELECT CAST(@ID_AREA_CONHECIMENTO AS VARCHAR)
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);

                db.AddParam("@ID_AREA_CONHECIMENTO", SqlDbType.Int, area.IdAreaConhecimento);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, area.Situacao);
                //db.AddParam("@DATA_CADASTRO", SqlDbType.DateTime, area.DataCadastro);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion

        #region Listar Area de Conhecimento
        public DataTable listarAreaConhecimento(AreaConhecimento area)
        {
            string SQL = @"SELECT  tac.ID_AREA_CONHECIMENTO,
                                   tac.DESCRICAO,
                                   tac.SITUACAO
                            FROM   TB_AREA_CONHECIMENTO tac ";

            if(area.Descricao != "")
                SQL += "  WHERE UPPER(tac.DESCRICAO) LIKE '%' + UPPER(@DESCRICAO) + '%' ";

            SQL += " ORDER BY tac.DESCRICAO";                          

            DataAccess db = new DataAccess(SQL);
            if (area.Descricao != "")
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);
            return db.GetDataTable();
        }
        #endregion

        #region Verificar Area de Conhecimento
        public DataTable areaConhecimentoJaExiste(AreaConhecimento area)
        {
            string SQL = @"SELECT  tac.ID_AREA_CONHECIMENTO                           
                            FROM   TB_AREA_CONHECIMENTO tac ";

            if (area.Descricao != "")
                SQL += " WHERE UPPER(tac.DESCRICAO) = UPPER(@DESCRICAO) ";

            DataAccess db = new DataAccess(SQL);

            if (area.Descricao != "")
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, area.Descricao);

            return db.GetDataTable();
        }
        #endregion


        public DataTable buscarAreaConhecimento(int p)
        {
            string SQL = @"SELECT * FROM TB_AREA_CONHECIMENTO 
                            WHERE ID_AREA_CONHECIMENTO = @ID_AREA_CONHECIMENTO";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_AREA_CONHECIMENTO", SqlDbType.Int, p);
            
            return db.GetDataTable();
        }
    }
}
